Dart 是由 google 主導並開發的語言。可搭配也是 google 主導的 flutter 平台框架,一套程式可以開發 Android、iOS App、Web、桌面應用程式等等,並可應用在 Windows、macOS、Linux、Fuchsia(Google下一代作業系統)。看到這麼多的優點,未來錢途不可限量,開始來好好研究一下吧。
在前篇 Flutter 安裝 macOS開發環境 安裝 Flutter 開發環境後就可以使用 Dart 語言。
但對於初學者而言,有現成的Dart平台,不需要這麼麻煩,要安裝語言環境才能開始學習,只要連上網路,就即可使用,那就是DartPad。
也可以先安裝Homebrew軟體後,再安裝Dart SDK
先在終端機安裝Homebrew 輸入下面指令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
接下來進行安裝 Dart SDK
brew tap dart-lang/dart
brew install dart -devel
安裝後執行
brew info dart
驗證是否安裝正確
Dart官網也有針對各個OS有詳細的安裝說明。
使用 var 來宣告 變數
要注意的是,若一開始未給值,變數 default 為 null,之後可以變換為其他型態;
void main() {
var name;
print(name);
name = 'Dragon';
print(name);
name = 12345678;
print(name);
}
反之,若是一開始給值,之後就只能使用該值的型態,不能變換型態。
void main() {
var name = 'Dragon';
print(name);
name = 12345678;
print(name);
}
不過個人還是建議,任何變數一開始就制定好其型態。
void main() {
String name = 'Dragon';
print(name);
}
若想設置常數,可以使用 final、const 進行修飾,只能被給值一次。而const 是編譯時的常數,所以若是要宣告成const 的纇(class),則必須加上 static,即 static const (順序不可顛倒)。而實體變數則是要宣告成 final 而不可以是 const。
void main() {
const PI = 3.1415926;
var radius ;
radius = 5;
final circumference = 2 *radius* PI;
print(circumference);
}
Dart 语言支持下列的类型:
numbers:分為兩種
int: 整數
double: 浮點數
var x = 1; //整數
var hex = 0xDEADBEEF; //整數
var y = 1.1; //浮點數
var exponents = 1.42e5; //浮點數
double z = 1; //浮點數Equivalent to double z = 1.0.
strings: 字串
void main() {
var s = '字符串插值';
print('Dart 有$s,使用起来非常方便。'); //可用$帶變數到字串
print('Dart 有字符串插值' ',使用起来非常方便'); //可以用“”或‘’串字串
print('Dart 有字符串插值' + ',使用起来非常方便'); //可以用+串字串
print('使用${s.substring(3, 5)}表達式也非常方便。'); //可用${}處理字串
s = ''' 多行
字串'''; //使用 ‘’‘ 或 """ 展現多行字串
print(s);
}
booleans: 布林值,使用 bool 關鍵字表示布林型態。布林值只有: true、false。
void main() {
var t = true;
var f = false;
print(t);
print(f);
}
lists: 清單(arrays)類似矩陣
void main() {
//宣告固定長度
var fixedList1 = new List(2);
fixedList1[0] = 1;
fixedList1[1] = 'a';
print(fixedList1);
var fixedList2 = [1,2,3,"Hello",'World'];
print(fixedList2);
//宣告可變長度
var growableList = [];
growableList.add("x");
growableList.add("y");
growableList.add("z");
print(growableList.length);
print(growableList);
growableList.forEach(print);
}
sets:集合,集合中的元素是沒有順序且不能重複,因此不能使用索引值去取值(如set[0]),但可以列舉出來。
因為是集合,所以可以使用交集、聯集等等運算。
void main() {
var colorSet1 = {'green', 'blue', 'yellow', 'red'};
var colorSet2 = {'red', 'black', 'white', 'yellow'};
print(colorSet1);
for (var color in colorSet1) {
print(color); //不可使用 colorSet1[0]
}
print("交集:"+colorSet1.intersection(colorSet2).toString());
print("聯集:"+colorSet1.union(colorSet2).toString());
print("差集:"+colorSet1.difference(colorSet2).toString());
}
maps: Map 是以 key-value的形式儲存,Map中的key是不可以重複,如果key不存在則回傳null。
void main() {
var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
print(gifts);
var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
print(nobleGases);
var colorMap = {
'black': '#000000',
'yellow': '#FFFF00',
'white': '#FFFFFF',
'red': '#FF0000'
};
print(colorMap['red']);
}
runes: (用于在字符串中表示 Unicode 字符),要先安裝Characters package。
首先於 pubspec.yaml 檔案加上
dependencies:
characters: ^1.0.0
安裝
接下來就可以import 來使用
mport 'package:characters/characters.dart';
void main() {
var hi = 'Hi ??';
print(hi);
print('The end of the string: ${hi.substring(hi.length - 1)}');
print('The last character: ${hi.characters.last}\n');
}
symbols:符號,表示操作符或者標識符。也許從來不會用到Symbol,但是該功能對於通過名字來引用標識符的情況是非常有價值的,特別是混淆後的代碼,標識符的名字被混淆了,但是Symbol的名字不會改變,下面列下例子:
//在標識符前加 # 前缀,來獲取Symbol
//#radix
//#bar
void main() {
print(#n == new Symbol('n')); //輸出:true
var name = 'dragon';
Symbol symbol = #name;
print(symbol); //輸出:Symbol("name")
print(#name); //輸出:Symbol("name")
print(name);
}